/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package datos;

import auxiliares.MyImageRenderListener;
import auxiliares.Informante;
import auxiliares.NotificadorDePorcentajes;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.parser.PdfImageObject;
import com.itextpdf.text.pdf.parser.PdfReaderContentParser;
import java.io.IOException;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author jenkin90
 */
public class ArchivoPdf implements IArchivoPdf{

    private PdfReader archivoPDF;
    private Integer paginas;
    private List<NotificadorDePorcentajes> aQuienInfomar=new LinkedList<NotificadorDePorcentajes>();

    public ArchivoPdf(String file) {
        try {
            archivoPDF = new PdfReader(file);
        } catch (IOException ex) {
            System.out.println("No se puede abrir el archivo .pdf de origen");
        }
        paginas=archivoPDF.getNumberOfPages();
    }

    @Override
    public List<PdfImageObject> getImages() {
        List<PdfImageObject> result = new ArrayList<PdfImageObject>();

        PdfReaderContentParser parser = new PdfReaderContentParser(archivoPDF);
        MyImageRenderListener listener = new MyImageRenderListener();

        int paginas = archivoPDF.getNumberOfPages();
        for (int i = 1; i <= paginas; i++) {
            try {
                parser.processContent(i, listener);
            } catch (IOException ex) {
                Logger.getLogger(ArchivoPdf.class.getName()).log(Level.SEVERE, null, ex);
            }
            result = listener.getImages();
            for(NotificadorDePorcentajes n:this.aQuienInfomar){
                n.incrementa(this);
            }

        }
        return result;
    }

    @Override
    public Integer getNumeroDeRepeticiones() {
        return paginas;
    }

    @Override
    public void informame(NotificadorDePorcentajes n) {
        this.aQuienInfomar.add(n);
    }
}
